package br.com.boreo.boreoapp_orcamento.dao;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import br.com.boreo.boreoapp_orcamento.model.Orcamento;
import br.com.boreo.boreoapp_orcamento.model.OrcamentoItem;

public class OrcamentoItensDAO {
	private BoreoAppOrcamentoDAO boreodao;
	/*Dados da tabela*/
	private static final String NOME_TABELA = "orcamento_itens";
	private static final String ID = "_id";
	private static final String ID_ORCAMENTO = "id_orcamento";
	private static final String ID_PRODUTO = "id_produto";
	private static final String ID_LOTE = "id_lote";
	private static final String QUANTIDADE = "quantidade";
	private static final String PRECO = "preco";
	private static final String DESCRICAO_PRODUTO = "descricao_produto";
	private static final String UNIDADE_MEDIDA = "unidade_medida";
	
	public OrcamentoItensDAO(Context context) {
		boreodao = BoreoAppOrcamentoDAO.getInstance(context);
	}

	public long inserir(int id_orcamento, int id_produto, int id_lote, double quantidade, double preco, String descricao_produto, String unidade_medida) {
		ContentValues valores = new ContentValues();
	    valores.put(ID_ORCAMENTO, id_orcamento);
	    valores.put(ID_PRODUTO, id_produto);
	    valores.put(ID_LOTE, id_lote);
	    valores.put(QUANTIDADE, quantidade);
	    valores.put(PRECO, preco);
	    valores.put(DESCRICAO_PRODUTO, descricao_produto);
	    valores.put(UNIDADE_MEDIDA, unidade_medida);
	    
	    long retorno = boreodao.getWritableDatabase().insert(NOME_TABELA, null, valores);
	    boreodao.close();
    	return retorno;
	}

	public long inserirComId(int id, int id_orcamento, int id_produto, int id_lote, double quantidade, double preco, String descricao_produto, String unidade_medida) {
		ContentValues valores = new ContentValues();
		valores.put(ID, id);
		valores.put(ID_ORCAMENTO, id_orcamento);
	    valores.put(ID_PRODUTO, id_produto);
	    valores.put(ID_LOTE, id_lote);
	    valores.put(QUANTIDADE, quantidade);
	    valores.put(PRECO, preco);
	    valores.put(DESCRICAO_PRODUTO, descricao_produto);
	    valores.put(UNIDADE_MEDIDA, unidade_medida);
	    
	    long retorno = boreodao.getWritableDatabase().insert(NOME_TABELA, null, valores);
	    boreodao.close();
    	return retorno;
	}

	public long alterar(int id, int id_orcamento, int id_produto, int id_lote, double quantidade, double preco, String descricao_produto, String unidade_medida) {
		ContentValues valores = new ContentValues();
		valores.put(ID_ORCAMENTO, id_orcamento);
	    valores.put(ID_PRODUTO, id_produto);
	    valores.put(ID_LOTE, id_lote);
	    valores.put(QUANTIDADE, quantidade);
	    valores.put(PRECO, preco);
	    valores.put(DESCRICAO_PRODUTO, descricao_produto);
	    valores.put(UNIDADE_MEDIDA, unidade_medida);
	    
    	String[] whereAgrs = {Integer.toString(id)};
    	int retorno = boreodao.getWritableDatabase().update(NOME_TABELA, valores, ID+" = ?", whereAgrs);
    	boreodao.close();
    	return retorno;
	}

	public ArrayList<OrcamentoItem> selectOrcamentosItens() {
		ArrayList<OrcamentoItem> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" ORDER BY "+ID, null));
		boreodao.close();
		return c;
	}

	public ArrayList<OrcamentoItem> selectOrcamentoItemPorId(int id_orcamentoItem) {
		ArrayList<OrcamentoItem> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+ID+" = "+id_orcamentoItem+" ORDER BY "+ID, null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<OrcamentoItem> selectOrcamentosItensPorOrcamento(int id_orcamento) {
		ArrayList<OrcamentoItem> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+ID_ORCAMENTO+" = "+id_orcamento+" ORDER BY "+ID, null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<OrcamentoItem> selectUltimoItemOrcamento() {
		ArrayList<OrcamentoItem> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+ID+" = (SELECT MAX("+ID+") FROM "+NOME_TABELA+") ", null));
		boreodao.close();
		return c;
	}
	
	public void excluirItensPorIdOrcamento(int id_orcamento) {
		boreodao.getReadableDatabase().delete(NOME_TABELA,ID_ORCAMENTO+"="+id_orcamento,null);
		boreodao.close();
	}

	public void excluirTodosOrcamentosItens() {
		boreodao.getReadableDatabase().delete(NOME_TABELA, null, null);
	}

	private ArrayList<OrcamentoItem> cursorToArray(Cursor c){
		ArrayList<OrcamentoItem> orcamentoItens = new ArrayList<OrcamentoItem>();
		while (c.moveToNext()) {
			orcamentoItens.add(new OrcamentoItem(c.getInt(0), c.getInt(1), c.getInt(2), c.getInt(3), c.getDouble(4), c.getDouble(5), c.getString(6), c.getString(7)));
		}
		return orcamentoItens;
	}
}
